package com.livepushvideo.ly.livepushvideo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.tencent.rtmp.ITXLivePushListener;
import com.tencent.rtmp.TXLiveBase;
import com.tencent.rtmp.TXLiveConstants;
import com.tencent.rtmp.TXLivePushConfig;
import com.tencent.rtmp.TXLivePusher;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    @BindView(R.id.btn_start)
    Button btn_start;
    @BindView(R.id.btn_stop)
    Button btn_stop;
    TXLivePusher mLivePusher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

        TXLiveBase.setConsoleEnabled(true);
        TXLiveBase.setLogLevel(TXLiveConstants.LOG_LEVEL_DEBUG);

        mLivePusher = new TXLivePusher(this);
        TXLivePushConfig mLivePushConfig = new TXLivePushConfig();
        mLivePusher.setConfig(mLivePushConfig);

        btn_start.setOnClickListener(this);
        btn_stop.setOnClickListener(this);
        mLivePusher.setPushListener(new ITXLivePushListener() {
            @Override
            public void onPushEvent(int i, Bundle bundle) {

                switch (i) {
                    case TXLiveConstants.PUSH_EVT_CONNECT_SUCC://已经成功连接到腾讯云推流服务器
                        break;
                    case TXLiveConstants.PUSH_EVT_PUSH_BEGIN://与服务器握手完毕,一切正常，准备开始推流
                        break;
                    case TXLiveConstants.PUSH_EVT_OPEN_CAMERA_SUCC://推流器已成功打开摄像头（Android部分手机这个过程需要1-2秒）
                        break;
                    case TXLiveConstants.PUSH_ERR_OPEN_CAMERA_FAIL://打开摄像头失败
                        break;
                    case TXLiveConstants.PUSH_ERR_OPEN_MIC_FAIL://打开麦克风失败
                        break;
                    case TXLiveConstants.PUSH_ERR_VIDEO_ENCODE_FAIL://视频编码失败
                        break;
                    case TXLiveConstants.PUSH_ERR_AUDIO_ENCODE_FAIL://音频编码失败
                        break;
                    case TXLiveConstants.PUSH_ERR_UNSUPPORTED_RESOLUTION://不支持的视频分辨率
                        break;
                    case TXLiveConstants.PUSH_ERR_UNSUPPORTED_SAMPLERATE://不支持的音频采样率
                        break;
                    case TXLiveConstants.PUSH_ERR_NET_DISCONNECT://网络断连,且经三次抢救无效,可以放弃治疗,更多重试请自行重启推流
                        break;
                    case TXLiveConstants.PUSH_WARNING_NET_BUSY://网络状况不佳：上行带宽太小，上传数据受阻
                        //主播网络不给力，如果您需要UI提示，这个 warning 相对比较有用（step10）。
                        break;
                    case TXLiveConstants.PUSH_WARNING_SERVER_DISCONNECT:
                        //推流请求被后台拒绝了，会触发有限次数的重试逻辑，有可能可以在某一次重试中推流成功。但实话实说，大部分场景中都是推流地址里的txSecret计算错了，或者被其他人占用了测试地址，所以这个 warning 对您的调试帮助意义更大
                        break;
                    case TXLiveConstants.PUSH_WARNING_RECONNECT://网络断连, 已启动自动重连 (自动重连连续失败超过三次会放弃)
                        break;
                    case TXLiveConstants.PUSH_WARNING_HW_ACCELERATION_FAIL://硬编码启动失败，采用软编码
                        break;
                    default:
                        break;
                }
            }

            @Override
            public void onNetStatus(Bundle bundle) {

            }
        });

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_start:
//                String rtmpUrl = "rtmp://2157.livepush.myqcloud.com/live/xxxxxx";
                String rtmpUrl = "rtmp://25549.livepush.myqcloud.com/live/25549_491c77a1fe?bizid=25549&txSecret=49e89978b63aa0119c7bf3917792d4b9&txTime=5B19567F";
                mLivePusher.startPusher(rtmpUrl);
                mLivePusher.startScreenCapture();
                break;
            case R.id.btn_stop:
                stopPublish();
                break;
            default:
                break;
        }
    }

    //结束录屏直播，注意做好清理工作
    public void stopPublish() {
        mLivePusher.stopScreenCapture();
        mLivePusher.setPushListener(null);
        mLivePusher.stopPusher();
    }
}
